@keyframes enter {
  0% {
    transform: translateY(10%);
    opacity: 0;
  }
  100% {
    transform: translateY(0%);
    opacity: 1;
  }
}
@keyframes enterFromLeft {
  0% {
    transform: translateX(-100%);
    opacity: 0;
  }
  100% {
    transform: translateX(0%);
    opacity: 1;
  }
}
@keyframes enterFromRight{
  0% {
    transform: translateX(100%);
    opacity: 0;
  }
  100% {
    transform: translateX(0%);
    opacity: 1;
  }
}
@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

.enterAnimation {
  animation: enter 0.5s ease-in-out forwards;
}
.enterFromLeftAnimation {
  animation: enterFromLeft 0.5s ease-in-out forwards;
}
.leaveAnimation {
  animation: enter 0.5s ease-in-out reverse forwards;
}
.leaveFromLeftAnimation {
  animation: enterFromLeft 0.5s ease-in-out reverse forwards;
}
.spinAnimation {
  display: inline-block;
  animation: spin 2s linear infinite;
}

/* 水平进入 */
.fromRight-enter-active,
.fromLeft-enter-active {
  transition: all 0.3s;
  overflow: hidden;
}
.fromRight-leave-active,
.fromLeft-leave-active {
  transition: all 0.2s;
  overflow: hidden;
}
.fromRight-enter-from,
.fromLeft-leave-to {
  transform: translateX(10vw);
  opacity: 0;
}
.fromRight-leave-to,
.fromLeft-enter-from {
  transform: translateX(-10vw);
  opacity: 0;
}

.fromRight-enter-to,
.fromRight-leave-from,
.fromLeft-enter-to,
.fromLeft-leave-from {
  transform: translateX(0vw);
  opacity: 1;
}
/* 垂直进入 */
.fromTop-enter-active,
.fromBottom-enter-active {
  transition: all 0.3s;
  overflow: hidden;
}
.fromTop-leave-active,
.fromBottom-leave-active {
  transition: all 0.2s;
  overflow: hidden;
}
.fromTop-enter-from,
.fromLeft-leave-to {
  transform: translateY(10vh);
  opacity: 0;
}
.fromTop-leave-to,
.fromBottom-enter-from {
  transform: translateY(-10vh);
  opacity: 0;
}

.fromTop-enter-to,
.fromTop-leave-from,
.fromBottom-enter-to,
.fromBottom-leave-from {
  transform: translateY(0vh);
  opacity: 1;
}
